package grupobbva.pe.operhc.util;

import static grupobbva.pe.operhc.util.Constant.*;
import grupobbva.pe.operhc.domain.Cliente;
import grupobbva.pe.operhc.domain.Contratacion;
import grupobbva.pe.operhc.domain.Contrato;
import grupobbva.pe.operhc.domain.Producto;
import grupobbva.pe.operhc.service.CuadroMandoServiceImpl;

import java.math.BigDecimal;
import java.util.List;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.builder.ToStringBuilder;

import pe.com.grupobbva.ohc.hy40.CtConOhcHY40Rs;
import pe.com.grupobbva.ohc.qf3b.CtConOhcQF3BRs;

public class MockInvokeService {

	public static void main(String[] args) throws Exception {
		long ini = System.currentTimeMillis();
		CuadroMandoServiceImpl cuadroMando = new CuadroMandoServiceImpl();
		try {
			//Utilities.BROKER_SOCKET = "118.180.13.211:7802";
			//Utilities.BROKER_SOCKET = "118.180.54.186:7804";
			
			//Utilities.BROKER_SOCKET = "118.180.54.185:7804";
			Utilities.BROKER_SOCKET = "118.180.36.26:7808";
			Utilities.TERMINAL_LOGICO = RangoTerminal.getTerminalLogico("7%00-7%49");
			Utilities.TERMINAL_CONTABLE = "7%00";
//			pruebaCliente(cuadroMando);
//			
//			Cliente cliente = (Cliente) Utilities.deserializaObjeto("D:\\BBVA\\Proyectos\\OperativizacionHC\\serializados\\produccion\\cliente.ser");
//			System.out.println(cliente);
//			System.out.println(cliente.getListProductos().size());
//			System.out.println(cliente.getListContratos().size());
			
			//listaContratos(cuadroMando);
			//pruebaContrato();
			//recuperaCliente();
			//pruebaAltaPrestamo(cuadroMando);
			//pruebaAltaTarjeta(cuadroMando);
			//pruebaAnularPrestamo(cuadroMando);
			//pruebaAnularTarjeta(cuadroMando);
//			CtConOhcQF3BRs rs = InvokeWS.consumirQF3B("P017073", "P017073");
			//CtConOhcQF3BRs rs = InvokeWS.consumirQF3B("P007395");
//			System.out.println(ToStringBuilder.reflectionToString(rs));
//			Utilities.serializaObjeto("D:\\BBVA\\Proyectos\\OperativizacionHC\\serializados\\produccion\\usuario.ser", rs);
//			
//			System.out.println(Utilities.obtenerNumeroFormateado("1234.56"));
			reevaluarIngresos();
		} catch (Exception e) {
			e.printStackTrace();
		}
		long fin = System.currentTimeMillis();
		System.out.println("Tiempo total en Milisegundos: " + (fin - ini));
		
	}
	
	
	

	private static void pruebaCliente(CuadroMandoServiceImpl cuadroMando) throws Exception {
		//ParametroService parametrosService = new ParametroServiceImpl();
		//Cliente cliente = cuadroMando.buscarCliente("P011437", "L", "06681016");
		//Cliente cliente = cuadroMando.buscarCliente("P019075", "L", "08780209");
		//List<Contrato> listContratos = cuadroMando.buscarContratos("P019075", "L", "08780209");
		//29523728
		Cliente cliente = cuadroMando.buscarCliente("P017073", "", "", "77783161");
		List<Contrato> listContratos = cuadroMando.buscarTodosContratos("P017073", "L", "40253714");
		cliente.setListContratos(listContratos);
		System.out.println("Cliente: " + cliente);
		/*
		ReadProperties readProperties = new ReadProperties();
		Map<String, Object> mapResult = parametrosService.verifyIsValidClient(cliente, readProperties);
		System.out.println("mapResult: " + mapResult);
		Map<String, Object> mapResultProducts = parametrosService.getAllStructureProducts(cliente, cliente.getListContratos());
		System.out.println("mapResultProducts: " + mapResultProducts);
		*/
		
		/*Cloner cloner = new Cloner();
		List<Contrato> listaTemporal = cloner.deepClone(listContratos);
		*/
		Utilities.serializaObjeto("D:\\BBVA\\Proyectos\\OperativizacionHC\\serializados\\produccion\\cliente.ser", cliente);
		
	}
	
	private static void pruebaAltaPrestamo(CuadroMandoServiceImpl cuadroMando) throws Exception {
		Contratacion contratacion = new Contratacion();
		Contrato contrato = new Contrato();
		contrato.setTipoProducto("CO");
		contrato.setTipoSubProducto("CS01");
		contrato.setMonto(new BigDecimal(1500));
		contrato.setPlazo(24);
		contrato.setTasa(new BigDecimal(12.457));
		contratacion.setTipoDocumento("L");
		contratacion.setNumeroDocumento("06681016");
		contratacion.setFamilia(FAMILIA_PRESTAMOS);
		contratacion.setOficinaGestora("0241");
		contratacion.setContrato(contrato);
		contratacion.setCuentaCargo("00110241000200974027");
		contratacion.setGestor("00900");
		contratacion.setUsuarioAutorizador("P007395");
		contratacion.setUsuarioVendedor("P016653");
		contratacion.setCodigoCanal("01");
		contratacion.setCodigoSubCanal("99");
		cuadroMando.crearContrato("P016653", contratacion);
	}
	
	private static void pruebaAltaTarjeta(CuadroMandoServiceImpl cuadroMando) throws Exception {
		Contratacion contratacion = new Contratacion();
		Contrato contrato = new Contrato();
		contrato.setTipoProducto("TC");
		contrato.setTipoSubProducto("C1");
		contrato.setMonto(new BigDecimal(15000));
		contrato.setPlazo(24);
		contrato.setTasa(new BigDecimal(32.457));
		contratacion.setTipoDocumento("L");
		contratacion.setNumeroDocumento("40253717");
		contratacion.setFamilia(FAMILIA_TARJETAS);
		contratacion.setOficinaGestora("0241");
		contratacion.setContrato(contrato);
		contratacion.setCuentaCargo("");
		contratacion.setCuentaCargo("00110241000200974027");
		contratacion.setGestor("00900");
		contratacion.setUsuarioAutorizador("P007395");
		contratacion.setUsuarioVendedor("P016653");
		contratacion.setCodigoCanal("01");
		contratacion.setCodigoSubCanal("99");
		System.out.println(cuadroMando.crearContrato("P007397", contratacion));
	}
	
	private static void pruebaAnularPrestamo(CuadroMandoServiceImpl cuadroMando) throws Exception {
		Contratacion contratacion = new Contratacion();
		Contrato contrato = new Contrato();
		contrato.setTipoProducto("CO");
		contrato.setNumeroContrato("001104869690009367");
		contrato.setNumeroContrato(contrato.getNumeroContratoFinal());
		contratacion.setTipoDocumento("L");
		contratacion.setNumeroDocumento("40253714");
		contratacion.setFamilia(FAMILIA_PRESTAMOS);
		contratacion.setOficinaGestora("0486");
		contratacion.setContrato(contrato);
		System.out.println(cuadroMando.anularContrato("P007397", contratacion));
	}
	
	private static void pruebaAnularTarjeta(CuadroMandoServiceImpl cuadroMando) throws Exception {
		Contratacion contratacion = new Contratacion();
		Contrato contrato = new Contrato();
		contrato.setTipoProducto("TC");
		contrato.setNumeroContrato("001104869690009383");
		contrato.setNumeroContrato(contrato.getNumeroContratoFinal());
		contratacion.setTipoDocumento("L");
		contratacion.setNumeroDocumento("40253714");
		contratacion.setFamilia(FAMILIA_PRESTAMOS);
		contratacion.setOficinaGestora("0486");
		contratacion.setContrato(contrato);
		cuadroMando.anularContrato("P016653", contratacion);
	}

	private static void pruebaProducto() {
		Producto producto = new Producto();
		String productoInfo = "00011500000048000000001256028";
		producto.asignarInformacion(productoInfo, null);
		System.out.println("Producto: " + producto);
	}
	
	private static void pruebaContrato() {
		Contrato contrato = new Contrato();
		String contratoInfo = "001102419681231372  CO  P  V     10812.34     2193.66  99.523   6  2012-03-26";
		contrato.mapearContrato(contratoInfo);
		System.out.println("Contrato: " + contrato);
	}
	
	private static void recuperaCliente() throws Exception {
		System.out.println("Cliente: " + Utilities.deserializaObjeto("D:\\cliente.ser"));
	}
	
	private static void obtenerPerfilHOST() {
		CtConOhcQF3BRs rs = InvokeWS.consumirQF3B("P016653", "P016653");
		System.out.println(ArrayUtils.toString(Utilities.splitByPosition(rs.getData().getAplfacu(), 2)));
	}
	
	private static void reevaluarIngresos() {
		//CtConOhcHY40Rs rs40 = InvokeWS.consumirHY40("P016653", "L", "40255902", new BigDecimal(185));
		CtConOhcHY40Rs rs40 = InvokeWS.consumirHY40("P017073", "L", "00056961", new BigDecimal(1100), new BigDecimal(5000));
		System.out.println(ToStringBuilder.reflectionToString(rs40.getHeader()));
		//System.out.println(rs40.getData());
	}
	
	private static void listaContratos(CuadroMandoServiceImpl cuadroMando) {
		try {
			List<Contrato> listContratos = cuadroMando.buscarTodosContratos("P007395", "L", "40253714");
			//listContratos = cuadroMando.filtrarContratosVisibles(listContratos);
			System.out.println(listContratos);
			System.out.println("TOTAL DE CONTRATOS: " + listContratos.size());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
